package nucleo;

import java.applet.Applet;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 *
 * @author OsomGames
 * @date 18-07-2011
 */
public class Personaje_bk extends Elemento{
    // Array que contiene los sprites e Integer que señala al actual
    private BufferedImage[] sprites;
    private Integer sprite_actual=0;
    
    // Objeto para el tratamiento de los sprites
    private Sprite s= new Sprite();
    
    private final int ANCHO;
    private final int ALTO;
    
    private boolean izquierda, derecha, suelo;
    
    /**
     * Menudo constructor que me acabo de montar chaval, que asco me da
     * @param ruta  - Ruta del fichero
     * @param x     - Posicion X
     * @param y     - Posicion Y
     * @param ancho - Ancho
     * @param alto  - Alto
     * @param filas - Numero de filas
     * @param columnas - Numero de columnas
     * @param a - El Applet al que esta enlazado
     * @param g - Gravedad
     */
    public Personaje_bk(String ruta,int x, int y, int ancho, int alto,int filas,int columnas){
        // Llamada al constructor padre: Elemento
        super(x,y);
        ANCHO=ancho;
        ALTO=alto;
        izquierda=derecha=suelo=false;

        try {
            sprites= Sprite.cargaSprites(ruta, filas, columnas, ancho, alto);
            
        } catch (IOException ex) {
            System.out.println("Fallo al separar el sprite"+ex.getMessage());
            
        }
    }
    
    /**
     * El metodo para pintar el personaje
     * @param g Graficos 2D
     * @param a El applet al que se pinta
     */
    public void pintarPersonaje(Graphics2D g, Applet a){
        g.drawImage(sprites[sprite_actual],this.getX(),this.getY(), a);
    }
    
    /**
     * El metodo que recibe el evento y mueve al personaje
     * @param m - Movimiento
     */
    public void mover(Movimiento m){
        if(m==Movimiento.DERECHA){
            // Avanza a la derecha
            this.derecha=true;
            this.setVx(5);
        }
        else if(m==Movimiento.IZQUIERDA){
            // Avanza a la izquierda
            this.izquierda=true;
            this.setVx(-5);
        }
        if(m==Movimiento.ESPACIO){
            // Salta
            if(suelo){
                this.setVy(-10);
                suelo=false;
            }
        }
    }
    /**
     * Cuando el usuario suelta una tecla de movimiento el personaje se detiene
     * @param m - Movimiento
     */
    public void detenerMover(Movimiento m){
        if(m==Movimiento.DERECHA){
            // Avanza a la derecha
            this.derecha=false;
            this.setVx(0);
        }
        else if(m==Movimiento.IZQUIERDA){
            // Avanza a la izquierda
            this.izquierda=false;
            this.setVx(0);
        }
    }
    /**
     * Actualizar la logica del personaje
     */
    public void logicaPersonaje(){
        // Andar a la derecha
        if(derecha){
            this.setX(this.getX()+this.getVx());
        }
        
        // Andar a la izquierda
        if(izquierda){
            this.setX(this.getX()+this.getVx());
        }
        
        // La caida/salto
        if(!suelo){   
            this.setY(this.getY()+this.getVy());                
            this.setVy(this.getVy()+this.getGravedadPorTiempo());
            //this.setGravedadPorTiempo(this.getGravedadPorTiempo()+1);                
        }
    }
    protected void colision(Bloque b){
        if(this.getVy()!=0){
            this.setY(b.y-this.ALTO);
            this.suelo=true;
            this.setVy(0);
        }
        
    }
    public int getANCHO(){
        return ANCHO;
    }
    public int getALTO(){
        return ALTO;
    }
}

    